home *** CD-ROM | disk | FTP | other *** search
/ Night Owl 6 / Night Owl's Shareware - PDSI-006 - Night Owl Corp (1990).iso / 016a / 4dtnt.zip / BUMP.BTM < prev    next >
Text File  |  1991-10-29  |  2KB  |  113 lines

  1. if "%1" == "" .or. "%2" == "" .or. "%[%2]" == "" goto help
  2. set $foo=%@upper[%1]
  3. set $wstr=0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
  4.  
  5. iff      %$foo = A then ^ gosub alpha
  6.  elseiff %$foo = B then ^ gosub binary
  7.  elseiff %$foo = O then ^ gosub octal
  8.  elseiff %$foo = H then ^ gosub hex
  9.  elseiff %$foo = D then ^ gosub dec
  10.  elseiff %$foo = N then ^ gosub an
  11.  elseiff %$foo gt 1 .and. %$foo lt 37 then ^ gosub base
  12.  else goto help
  13. endiff
  14.  
  15. iff %$val ne 0 then^unset %2 ^ gosub cleanup ^ goto helpval
  16.  else set %2=%$foo ^gosub cleanup^quit 0
  17. endiff
  18. quit
  19.  
  20. :cleanup
  21. rem unset $foo $wstr $val $max >& nul
  22. return
  23.  
  24. :alpha
  25. set $max=25
  26. set $wstr=%@substr[%$wstr,10,26]
  27. gosub bumpit
  28. return
  29.  
  30. :binary
  31. set $max=1
  32. gosub bumpit
  33. return
  34.  
  35. :octal
  36. set $max=7
  37. gosub bumpit
  38. return
  39.  
  40. :hex
  41. set $max=15
  42. gosub bumpit
  43. return
  44.  
  45. :dec
  46. set $max=9
  47. gosub bumpit
  48. return
  49.  
  50. :an
  51. set $max=35
  52. gosub bumpit
  53. return
  54.  
  55. :base
  56. set $max=%@eval[%$foo-1]
  57. gosub bumpit
  58. return
  59.  
  60. :bumpit
  61. gosub validate
  62. if %$val ne 0 return
  63. set $foo=%@upper[%[%2]]
  64. set $i=%@len[%$foo]
  65. set $j=%@eval[%$i-1]
  66. set $k=%$j
  67. :bumploop
  68. set $front=
  69. if %$j gt 0 set $front=%@substr[%$foo,0,%$j]
  70. set $targ=%@substr[%$foo,%$j,1]
  71. set $rear=
  72. if %$j lt %$k set $rear=%@substr[%$foo,%@eval[%$j+1],%@eval[%$k-%$j]]
  73. set $l=%@index[%$wstr,%$targ]
  74. iff %$l lt %$max then ^ set $targ=%@substr[%$wstr,%@eval[%$l+1],1]^set $j=0
  75.   else set $targ=%@substr[%$wstr,0,1]
  76. endiff
  77. set $foo=%[$front]%[$targ]%[$rear]
  78. if %$j gt 0 (set $j=%@eval[%$j-1]^goto bumploop)
  79. rem unset $i $j $k $l $front $rear $targ >& nul
  80. return
  81.  
  82. :validate
  83. set $i=0
  84. :valloop
  85. set $val=%@index[%$wstr,%@substr[%[%2],%$i,1]]
  86. if %$val lt 0 .or. %$val gt %$max (set $val=%$max^return)
  87. set $i=%@eval[%$i+1]
  88. iff %$i lt %@len[%[%2]] then ^ goto valloop
  89.   else set $val=0^return
  90. endiff
  91. return
  92.  
  93. :helpval
  94. echo Invalid character detected.
  95. echo .
  96. goto help
  97.  
  98. :help
  99. echo Usage BUMP  mode   var
  100. echo                    
  101. echo              !      !
  102. echo              !      Any environment variable of the correct type
  103. echo              A=alpha     [A-Z]
  104. echo              B=binary    [0-1]
  105. echo              D=decimal   [0-9]
  106. echo              H=hex       [0-F]
  107. echo              N=alph/num  [0-9,A-F]
  108. echo              O=octal     [0-7]
  109. echo              [2-36]      [0-(n-1)]
  110. echo New value returned in var
  111. echo Carry propagates left, overflow is ignored
  112. quit 4
  113.